package 简单.模拟;

import java.util.Arrays;

/**
 * 给你一个非负整数数组 nums 。如果存在一个数 x ，
 * 使得 nums 中恰好有 x 个元素 大于或者等于 x ，
 * 那么就称 nums 是一个 特殊数组 ，而 x 是该数组的 特征值 。
 * 注意： x 不必 是 nums 的中的元素。
 * 如果数组 nums 是一个 特殊数组 ，请返回它的特征值 x 。
 * 否则，返回 -1 。可以证明的是，如果 nums 是特殊数组，那
 * 么其特征值 x 是 唯一的 。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/special-array-with-x-elements-greater-than-or-equal-x
 */
public class 特殊数组的特征值_1608 {

    public static void main(String[] args) {

        System.out.println(specialArray(new int[]{3, 5}));

    }

    /**
     * 排序+遍历
     *
     * @param nums
     * @return
     */
    public static int specialArray(int[] nums) {
        Arrays.sort(nums);
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] >= (nums.length - i)) {
                if (i == 0) {
                    return nums.length - i;
                } else if (nums[i - 1] < (nums.length - i)) {
                    return nums.length - i;
                }
            }
        }
        return -1;
    }

}
